package co.gov.medellin.ssti.sub.model.service;

import java.util.Collection;
import java.util.List;

import co.gov.medellin.ssti.sub.model.vo.Beneficiario_AtributoVO;
import co.gov.medellin.ssti.sub.model.vo.BeneficioOtorgadoVO;
import co.gov.medellin.ssti.sub.model.vo.BeneficioVO;
import co.gov.medellin.ssti.sub.model.vo.UsuarioxSedeVO;

public interface BeneficioService {
	/*
	 * public boolean renovarBeneficio(Long codeSubprograma, Long
	 * codeBeneficiario, Long codeOldSede, Long codeNewSede, String
	 * fechaOtorgamiento) throws SQLException;
	 */

	/**
	 * Metodo que consulta si el beneficiario identificado por codeBeneficiario
	 * tiene algun beneficio para un subprograma identificado por
	 * codeSubprograma.
	 * 
	 * @param codeBeneficiario
	 *            Codigo del beneficiario.
	 * @param codeSubprograma
	 *            Codigo del subprograma.
	 * @return
	 */
	boolean isExisteBeneficiario(Long codeBeneficiario, Long codeSubprograma);

	boolean isEmpresaBeneficiario(Long codeEmpresa, Long codeSubprograma);

	BeneficioOtorgadoVO findBOT(Long codeBOT);

	/**
	 * Metodo que consulta el costo del beneficio identificado por
	 * codeBeneficio.
	 * 
	 * @param codeBeneficio
	 *            Codigo del beneficio.
	 * @return String representando el costo del beneficio.
	 */
	String findCostoBeneficio(Long codeBeneficio);

	/**
	 * Metodo que consulta el costo del beneficio otorgado identificado por
	 * codeBot.
	 * 
	 * @param codeBot
	 *            Codigo del beneficio otorgado.
	 * @return
	 */
	String findCostoBOT(Long codeBot);

	/**
	 * Metodo que consulta la fecha de un beneficio otorgado.
	 * 
	 * @param codeBot
	 *            Codigo del beneficio otorgado.
	 * @return String representando la fecha del beneficio otorgado
	 *         (dd/mm/RRRR).
	 */
	String findFechaBOT(Long codeBot);

	/**
	 * Metodo que consulta el valor TERCERO de un beneficio otorgado.
	 * 
	 * @param codeBot
	 *            Codigo del beneficio otorgado.
	 * @return Valor TERCERO para el beneficio otorgado.
	 */
	String findTercero(Long codeBot);

	/**
	 * Metodo que consulta el TIPO_BENEFICIO de un beneficio otorgado.
	 * 
	 * @param codeBot
	 *            Codigo del beneficio otorgado.
	 * @return Valor TIPO_BENEFICIO para el beneficio otorgado.
	 */
	String findTipoBeneficio(Long codeBot);

	/**
	 * Metodo que consulta NUMERO_BEN_DISPONIBLE en TCS_BEN_SUBPROGRAMA_SEDE
	 * donde SEDE_CODIGO = codeSede y SBPR_CODIGO = codeSubprograma.
	 * 
	 * @param codeSede
	 *            Codigo de la sede.
	 * @param codeSubprograma
	 *            Codigo del subprograma.
	 * @return Valor NUMERO_BEN_DISPONIBLE.
	 */
	int findDisponibilidad(Long codeSede, Long codeSubprograma);

	/**
	 * 
	 * @param codeSede
	 * @param codeSubprograma
	 * @param codeBeneficiario
	 * @param lListaInsertar
	 * @param tercero
	 * @param i
	 * @param strArrIns
	 * @param costoBeneficio
	 * @param fechaBeneficio
	 * @return
	 */
	boolean otorgarBeneficios(Long codeSede, Long codeSubprograma,
			Long codeBeneficiario,
			List<Beneficiario_AtributoVO> lListaInsertar, String tercero,
			int i, String strArrIns[], String costoBeneficio,
			String fechaBeneficio);

	/**
	 * 
	 * @param codeSede
	 * @param codeSubprograma
	 * @param codeBeneficiario
	 * @param lListaInsertar
	 * @param tercero
	 * @param i
	 * @param strArrIns
	 * @param costoBeneficio
	 * @param fechaBeneficio
	 * @param tipoBeneficio
	 * @return
	 */
	boolean otorgarBeneficios(Long codeSede, Long codeSubprograma,
			Long codeBeneficiario,
			List<Beneficiario_AtributoVO> lListaInsertar, String tercero,
			int i, String strArrIns[], String costoBeneficio,
			String fechaBeneficio, String tipoBeneficio,
			String codeHechoVictimizante);

	boolean otorgarBeneficiosEmpresa(Long codeSede, Long codeSubprograma,
			Long codeBeneficiario,
			List<Beneficiario_AtributoVO> lListaInsertar, String tercero,
			int i, String strArrIns[], String costoBeneficio,
			String fechaBeneficio, String tipoBeneficio);

	/**
	 * 
	 * @param codeSede
	 * @param codeSubprograma
	 * @param codeBeneficiario
	 * @param lListaInsertar
	 * @param tercero
	 * @param i
	 * @param strArrIns
	 * @param costoBeneficio
	 * @param fechaBeneficio
	 * @param codeBot
	 * @param codeSedeOld
	 * @param tipoBot
	 * @return
	 */
	boolean updateBOT(Long codeSede, Long codeSubprograma,
			Long codeBeneficiario,
			List<Beneficiario_AtributoVO> lListaInsertar, String tercero,
			int i, String strArrIns[], String costoBeneficio,
			String fechaBeneficio, Long codeBot, Long codeSedeOld,
			String tipoBot, Long codigoHechoVictimizante);

	/**
	 * 
	 * @param codeBot
	 * @return
	 */
	String findSedeBOT(String codeBot);

	/**
	 * 
	 * @param codeBeneficio
	 * @param codeSubprograma
	 * @return
	 */
	Collection<BeneficioVO> findDetallesBeneficios(Long codeBeneficio,
			Long codeSubprograma);

	/**
	 * 
	 * @param codeBOT
	 * @return
	 */
	boolean deleteBOT(String codeBOT);

	/**
	 * Metodo que consulta si el usuario tiene permiso para eliminar el
	 * beneficio otorgado.
	 * 
	 * @param groupUserName
	 *            Nombre del grupo al que pertenece el usuario.
	 * @param userName
	 *            Nombre del usuario.
	 * @param codeBOT
	 *            Codigo del beneficio otorgado.
	 * @return true si tiene permiso, false de lo contrario.
	 */
	boolean validarDeleteBOT(String groupUserName, String userName, Long codeBOT);

	/**
	 * Metodo que consulta si el usuario tiene permiso para modificar el
	 * beneficio otorgado.
	 * 
	 * @param groupUserName
	 *            Nombre del grupo al que pertenece el usuario.
	 * @param userName
	 *            Nombre del usuario.
	 * @param codeBOT
	 *            Codigo del beneficio otorgado.
	 * @return true si tiene permiso, false de lo contrario.
	 */
	boolean validarEditBOT(String groupUserName, String userName, Long codeBOT);

	/**
	 * 
	 * @param codeSubpro
	 * @param codeBeneficiario
	 * @param codeOldSede
	 * @param codeNewSede
	 * @param fechaOtorgamiento
	 * @return
	 */
	boolean renewBeneficio(Long codeSubpro, Long codeBeneficiario,
			Long codeOldSede, Long codeNewSede, String fechaOtorgamiento);

	/**
	 * 
	 * @param idben
	 * @return
	 */
	Collection<UsuarioxSedeVO> findUsuarioxBeneficio(String idben);

	/**
	 * Metodo que consulta el programa al que pertenece un subprograma.
	 * 
	 * @param codeSubprograma
	 *            Codigo del subprograma.
	 * @return Codigo del programa (TCS_BEN_SUBPROGRAMA.PRG_CODIGO)
	 */
	String findPrograma(String codeSubprograma);
}
